import 'dart:convert';

import '../../generated/l10n.dart';
import 'package:flutter/cupertino.dart';
import 'package:intl/intl.dart';



extension StringExtension on String {
  /// string 转 int
  int toInt() {
    return int.parse(this);
  }

  /// string 转 double
  double toDouble() {
    return double.parse(this);
  }

  /// 判断是否是邮箱
  // bool isEmail() {
  //   const String regexEmail =
  //       '[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}';
  //   return RegExp(regexEmail).hasMatch(this);
  // }

  /// 是否是电话号码
  bool get isMobileNumber {
    String number = this;
    if (number.isNotEmpty != true) return false;
    return RegExp(
      r'^((13[0-9])|(14[5,7,9])|(15[^4])|(18[0-9])|(17[0,1,3,5,6,7,8])|(19)[0-9])\d{8}$',
    ).hasMatch(this);
  }

  /// 编码
  String toCoding() {
    String codeStr = this;
    String str = codeStr.toString();
    // 对字符串进行编码
    return jsonEncode(const Utf8Encoder().convert(str));
  }

  /// 解码
  String toDeCoding() {
    List<int> list = [];
    // 字符串解码
    jsonDecode(this).forEach(list.add);
    String value = const Utf8Decoder().convert(list);
    return value;
  }

  /// 首字母转大写
  String toUpperCaseCapitalize() {
    String orginStr = this;
    if (orginStr.isEmpty) {
      return "";
    }
    return "${this[0].toUpperCase()}${orginStr.substring(1)}";
  }

  /// 返回首字母并转大写
  String firstLetterToUpper() {
    String orginStr = this;
    if (orginStr.isEmpty) {
      return "";
    }
    return this[0].toUpperCase();
  }

  /// 获取当前事件戳
  String getCurrentTimeStample() {
    int currentDate = DateTime.now().millisecondsSinceEpoch;
    return "$currentDate";
  }

  /// 判断是否网络
  bool isNetWorkImg() {
    String img = this;

    if (img.startsWith('/static')) {
      return false;
    }

    bool networkImgUrl = img.startsWith('http') || img.startsWith('https');

    RegExp regex = RegExp(r'.com', caseSensitive: false);
    int count = regex.allMatches(img).length;

    if (count > 1) {
      networkImgUrl = false;
    }

    return networkImgUrl;
  }

  // SHA-256 加密函数
  // String sha256Hash() {
  //   // 将字符串转换为字节列表
  //   List<int> bytes = utf8.encode(this);
  //
  //   // 使用 crypto 库进行 SHA-256 加密
  //   Digest digest = sha256.convert(bytes);
  //
  //   // 将加密结果转换为十六进制字符串
  //   return digest.toString();
  // }

  // 获取今日时间字符串yyyy/MM/dd
  String getTodayDateString() {
    // 获取今天的日期
    DateTime today = DateTime.now();

    // 格式化为 yyyy/MM/dd
    String formattedDate = DateFormat('yyyy/MM/dd').format(today);

    return formattedDate;
  }

  // 获取外国格式字符串 Feb 14，2025
  String getFormatString(int second, String dateFormat) {
    DateTime date = DateTime.fromMillisecondsSinceEpoch(second);
    String formatString = DateFormat(dateFormat).format(date);
    return formatString;
  }

  String getCurrentCountry(BuildContext context) {
    // 获取当前 Locale
    Locale locale = View.of(context).platformDispatcher.locale;
    // 获取国家代码（例如：'CN'）
    String countryCode = locale.countryCode ?? 'Unknown';

    return countryCode;
  }

  String getDueDays(DateTime expirationDate) {
    // 获取当前时间（忽略时分秒）
    DateTime now = DateTime.now();
    DateTime today = DateTime(now.year, now.month, now.day); // 获取今天的日期，忽略时分秒

    // 计算目标日期和今天的天数差
    Duration difference = expirationDate.difference(today);

    // 获取剩余的天数
    int remainingDays = difference.inDays;

    // 如果目标日期距离今天 0 天，说明是今天，返回 0 天
    if (remainingDays == 0) {
      remainingDays = 0;
    }
    // 输出结果
    return remainingDays.toString();
  }

  /// 错误码统一处理
  // String getErrorText() {
  //   var text = "";
  //   switch (this) {
  //     case "U001":
  //       text = S.current.U001;
  //       break;
  //     case "U002":
  //       text = S.current.U002;
  //       break;
  //     case "U003":
  //       text = S.current.U003;
  //       break;
  //     case "U004":
  //       text = S.current.U004;
  //       break;
  //     case "U005":
  //       text = S.current.U005;
  //       break;
  //     case "U006":
  //       text = S.current.U006;
  //       break;
  //     case "U007":
  //       text = S.current.U007;
  //       break;
  //     case "U008":
  //       text = S.current.U008;
  //       break;
  //     case "U009":
  //       text = S.current.U009;
  //       break;
  //     case "U010":
  //       text = S.current.U010;
  //       break;
  //     case "U011":
  //       text = S.current.U011;
  //       break;
  //     case "U012":
  //       text = S.current.U012;
  //       break;
  //     case "U013":
  //       text = S.current.U013;
  //       break;
  //     case "U014":
  //       text = S.current.U014;
  //       break;
  //     case "U015":
  //       text = S.current.U015;
  //       break;
  //     case "U016":
  //       text = S.current.U016;
  //       break;
  //     case "U017":
  //       text = S.current.U017;
  //       break;
  //     case "I001":
  //       text = S.current.I001;
  //       break;
  //     case "I002":
  //       text = S.current.I002;
  //       break;
  //     case "I010":
  //       text = S.current.I010;
  //       break;
  //     case "I016":
  //       text = S.current.I016;
  //       break;
  //     case "I020":
  //       text = S.current.I020;
  //       break;
  //     case "I026":
  //       text = S.current.I026;
  //       break;
  //     case "I030":
  //       text = S.current.I030;
  //       break;
  //     case "I031":
  //       text = S.current.I031;
  //       break;
  //     case "I032":
  //       text = S.current.I032;
  //       break;
  //     case "I033":
  //       text = S.current.I033;
  //       break;
  //     default:
  //   }
  //   return text;
  // }
}
